package site.jlopen.utils.id;

import java.util.Random;

import site.jlopen.utils.StringUtil;
import site.jlopen.utils.id.snowflake.SnowFlake13;
 

/**
 * ID生成器工具类
 * 
 * @author 码农小鹿
 */
public class IdUtils {
	
	/**
	 * 生成主键ID
	 * 
	 * @return 雪花ID
	 */
	public static long SnowFlakeId() {
		//return SnowFlake.nextId();
		return SnowFlake13.nextId();
	}
	
	/**
	 * 获取随机UUID
	 * 
	 * @return 随机UUID
	 */
	public static String randomUUID() {
		return OUUID.randomUUID().toString();
	}

	/**
	 * 简化的UUID，去掉了横线
	 * 
	 * @return 简化的UUID，去掉了横线
	 */
	public static String simpleUUID() {
		return OUUID.randomUUID().toString(true);
	}

	/**
	 * 获取随机UUID，使用性能更好的ThreadLocalRandom生成UUID
	 * 
	 * @return 随机UUID
	 */
	public static String fastUUID() {
		return OUUID.fastUUID().toString();
	}

	/**
	 * 简化的UUID，去掉了横线，使用性能更好的ThreadLocalRandom生成UUID
	 * 
	 * @return 简化的UUID，去掉了横线
	 */
	public static String fastSimpleUUID() {
		return OUUID.fastUUID().toString(true);
	}
	
	/**
	 * 获取随机数
	 * @pre    前缀（可以为空）
	 * @length 总长度，包括@pre 参数的长度
	 * @return 
	 */
	public static String getRandom(String pre, int length) {  
    	if(StringUtil.isNotEmpty(pre) && pre.length() >= length) {
    		return pre;//如果前缀的长度大于目标长度，直接返回前缀
    	}
    	length = StringUtil.isEmpty(pre)?length:length-pre.length();
    	pre = StringUtil.isEmpty(pre)?"":pre;
    	String str = "abcdefghijklmnopqrstuvwxyz0123456789";  
        Random random = new Random();  
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < length; ++i) {  
            int number = random.nextInt(36);// [0,36)  
            sb.append(str.charAt(number));  
        }  
        return pre+sb.toString();  
    }

	/**
	 * 获取纯数字随机数
	 * @length 总长度
	 * @return
	 */
	public static String getNumeralRandom(int length) {
		String str = "0123456789";
		Random random = new Random();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < length; ++i) {
			int number = random.nextInt(10);// [0,10)
			sb.append(str.charAt(number));
		}
		return sb.toString();
	}
}
